home *** CD-ROM | disk | FTP | other *** search
/ Atari Forever 4 / Atari Forever 4.zip / Atari Forever 4.iso / FALCON / DEMOSRGB / FD_RGB06 / U_TRACK / EXEMPLE / N_COOKIE.S next >
Text File  |  1998-03-14  |  4KB  |  153 lines

  1. ; gestion du cookie jar 2.0 (1991 by TBC)
  2. ;
  3.  
  4.     .export    get_cookie
  5.     .export    add_cookie
  6.     .export    remove_cookie
  7.     
  8. ; ------------------------------------------------------------------
  9. ; récupére un cookie
  10. ; entrée : d0 = identificateur
  11. ; sortie : a0 = pointeur sur structure cookie
  12. ; ------------------------------------------------------------------
  13.  
  14.     text
  15.  
  16. get_cookie:
  17.     movem.l    d1-d7/a1-a6,-(a7)
  18.     move.l    d0,param
  19.     pea        rout_get(pc)
  20.     move.w    #$26,-(a7)
  21.     trap    #14
  22.     addq.l    #6,a7
  23.     move.l    pt_cook,a0
  24.     movem.l    (a7)+,d1-d7/a1-a6
  25.     rts
  26.     
  27. rout_get:
  28.     move.l    #0,pt_cook            ; par défaut retourne NULL
  29.     move.l    param,d0            ; d0 = parametre
  30.     move.l    $5a0.w,a0            ; a0 = adresse jar
  31.     cmp.l    #0,a0                ; inexistante ?
  32.     beq.b    fin_get                ; oui -> sort
  33.     
  34. bcl_get:
  35.     move.l    (a0),d1                ; d1 = id cookie
  36.     beq.b    fin_get                ; = 0 (fini) -> sort
  37.     cmp.l    d0,d1                ; compare avec recherché
  38.     beq.b    ok_cookie            ; idem -> ok
  39.     addq.l    #8,a0                ; different passe au suivant
  40.     bra.b    bcl_get                ; et boucle
  41.     
  42. ok_cookie:
  43.     move.l    a0,pt_cook            ; sauve adresse
  44.  
  45. fin_get:
  46.     rts                            ; retour
  47.  
  48. * ------------------------------------------------------------------------
  49. * ajoute un cookie
  50. * entrée : a0 = pointeur sur une structure cookie
  51. * sortie : d0 = 0 = ok
  52. *               -1 = cookie déjà existant
  53. *               -2 = erreur création impossible
  54. * ------------------------------------------------------------------------
  55.  
  56. add_cookie:
  57.     movem.l    d1-d7/a1-a6,-(a7)
  58.     move.l    a0,pt_cook
  59.     pea        rout_add(pc)
  60.     move.w    #$26,-(a7)
  61.     trap    #14
  62.     addq.l    #6,a7
  63.     move.w    rep,d0
  64.     movem.l    (a7)+,d1-d7/a1-a6
  65.     rts
  66.     
  67. rout_add:
  68.     clr.w    d7                ; nbe de cookies = 0
  69.     move.w    #-2,rep            ; par défaut = erreur
  70.     move.l    pt_cook,a0        ; a0 = pointeur cookie
  71.     move.l    (a0),d0            ; d0 = ident.
  72.     move.l    $5a0.w,a0        ; a0 = adresse jar
  73.     cmp.l    #0,a0            ; inexistant ?
  74.     beq.b    fin_add            ; oui -> sort
  75.  
  76. bcl_add:
  77.     move.l    (a0),d1            ; d1 = id cookie
  78.     beq.b    fin_jar            ; = 0 (fini) -> suite
  79.     cmp.l    d1,d0            ; = cookie a ajouter ?
  80.     beq.b    deja_present    ; oui -> sort
  81.     addq.l    #8,a0            ; passe au suivant
  82.     addq.w    #1,d7            ; nbe cookie + 1
  83.     bra.b    bcl_add            ; boucle
  84.  
  85. fin_jar:
  86.     move.l    4(a0),d6        ; d6 = nombre de slots dispos
  87.     cmp.w    d7,d6            ; slots tous occupés ?
  88.     blt.b    fin_add            ; oui -> sort
  89.     move.l    pt_cook,a1        ; a1 = adresse structure cookie
  90.     move.l    (a1),(a0)+        ; place l'id dans le jar
  91.     move.l    4(a1),(a0)+        ; place les infos
  92.     clr.l    (a0)+            ; efface cookie suivant (final)
  93.     move.l    d6,(a0)            ; nbe de slots
  94.     clr.w    rep                ; ok
  95. fin_add:        
  96.     rts                        ; fin
  97.  
  98. deja_present:
  99.     move.w    #-1,rep            ; déjà là !
  100.     rts
  101.     
  102. * ------------------------------------------------------------------------------
  103. * enleve un cookie
  104. * entrée d0 = identificateur
  105. * sortie d0 = 0 : erreur 1 : ok
  106. * ------------------------------------------------------------------------------
  107.  
  108. remove_cookie:
  109.     movem.l    d1-d7/a0-a6,-(a7)
  110.     move.l    d0,param
  111.     pea        rem_cook(pc)
  112.     move.w    #$26,-(a7)
  113.     trap    #14
  114.     addq.l    #6,a7
  115.     move.w    rep,d0
  116.     movem.l    (a7)+,d1-d7/a0-a6
  117.     rts    
  118.  
  119. rem_cook:
  120.     move.w    #0,rep            ; par défaut : erreur
  121.     move.l    param,d0        ; d0 = identificateur
  122.     move.l    $5a0.w,a0        ; a0 = adresse cookie jar
  123.     cmp.l    #0,a0            ; existant ?
  124.     beq.b    fin_remove        ; oui -> on sort
  125. bc:
  126.     move.l    (a0),d1            ; d1 = identificateur cookie
  127.     beq.b    fin_remove        ; = 0 ? -> donc pas trouvé -> on sort
  128.     cmp.l    d0,d1            ; on compare avec l'id cherché
  129.     beq.b    ok_rem            ; identiques -> on enleve
  130.     addq.l    #8,a0            ; passe au cookie suivant
  131.     bra.b    bc                ; boucle
  132.     
  133. ok_rem:
  134.     lea        8(a0),a1        ; passe au cookie suivant
  135.     move.l    (a1)+,d0        ; d0 = identificateur cookie suivant
  136.     beq.s    fin_rem            ; si = 0 -> dernier cookie
  137.     move.l    d0,(a0)+        ; sinon recopie sur cookie a enlever
  138.     move.l    (a1)+,(a0)+        ; recopie contenu cookie
  139.     bra.b    ok_rem            ; boucle
  140.  
  141. fin_rem:
  142.     move.l    d0,(a0)+        ; recopie cookie final
  143.     move.l    (a1),(a0)        ; d1 = nombre max de cookies
  144.     move.w    #1,rep            ; retour TRUE
  145. fin_remove:
  146.     rts                        ; fin
  147.  
  148.     data
  149.  
  150. rep:        ds.w    1
  151. pt_cook:    ds.l    1
  152. param:        ds.l    1